//package registry
//
//import (
//	"context"
//)
//
//// <schema>://<user>:<password>@<host>:<port>/<path>:<params>?<query>#<frag>
//
//// ServiceRegisterInfo 服务注册信息
//type ServiceRegisterInfo struct {
//	ID   string
//	Name string
//	Tags []string
//
//	// 服务注册时使用，就是一个Host:Port
//	Host string
//	Port int
//
//	SocketPath string
//	Meta       map[string]string
//	Namespace  string
//	Version    string
//	//服务元数据
//	Metadata map[string]string `json:"metadata"`
//
//	// 服务发现使用
//	//http://127.0.0.1:8080, http://127.0.0.1:8081
//	//grpc://127.0.0.1:9000, grpc://127.0.0.1:9001
//	Endpoints []string `json:"endpoints"` // 根据一个服务名称，获取多个服务地址
//}
//
//// IRegistry 服务注册接口
////type IRegistry interface {
////	// Registry 注册
////	Registry(ctx context.Context, service *ServiceRegisterInfo) error
////	// Deregistry 注销
////	Deregistry(ctx context.Context, service *ServiceRegisterInfo) error
////}
//
//type IRegistrar interface {
//	//注册
//	Register(ctx context.Context, service *ServiceRegisterInfo) error
//	//注销
//	Deregister(ctx context.Context, service *ServiceRegisterInfo) error
//}
//
//// IDiscovery 服务发现接口
//type IDiscovery interface {
//	// GetService todo 根据服务名称到注册中心获取服务实例
//	GetService(ctx context.Context, serviceName string) ([]*ServiceRegisterInfo, error)
//	// Watch 创建服务监听器
//	Watch(ctx context.Context, serviceName string) (IWatcher, error)
//}
//
//// IWatcher 服务监听器接口
//type IWatcher interface {
//	// rpc客户端获取服务实例，next在下面的情况下会返回服务
//	// 1.第一次监听时，如果服务实例列表为空，则返回服务实例列表
//	// 2.如果服务实例列表发生变化，则返回服务实例列表
//	// 3.上面两种情况都不满足，则会阻塞 context的 deadline或cancel
//	Next() ([]*ServiceRegisterInfo, error)
//
//	// 主动放弃监听
//	Stop() error
//}

package registry

import "context"

// 借鉴kratos
// 服务注册接口
type IRegistrar interface {
	//注册
	Register(ctx context.Context, service *ServiceRegisterInfo) error
	//注销
	Deregister(ctx context.Context, service *ServiceRegisterInfo) error
}

// ServiceRegisterInfo 服务注册信息
type ServiceRegisterInfo struct {
	ID   string
	Name string
	Tags []string

	// 服务注册时使用，就是一个Host:Port
	Host string
	Port int

	SocketPath string
	Meta       map[string]string
	Namespace  string
	Version    string
	//服务元数据
	Metadata map[string]string `json:"metadata"`
}
